#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <math.h>

int map[37][37];
int con[37][37];
int n, m;
int tot[37];
int max;

void dfs(int nod,int len)
{
	int i;
	if (len>max) max=len;
	for (i=1;i<=tot[nod];i++)
		if (con[nod][map[nod][i]]==0)
		{
			con[nod][map[nod][i]]=con[map[nod][i]][nod]=1;
			dfs(map[nod][i],len+1);
			con[nod][map[nod][i]]=con[map[nod][i]][nod]=0;
		}

}

main()
{

	int i;
	int a,b;

	while (1)
	{
		
		scanf("%d%d", &n, &m);
		if (n==0) break;
		//init
		memset(map,0,sizeof(map));
		memset(tot,0,sizeof(tot));

		for (i=1;i<=m;i++)
		{
		
			scanf("%d%d", &a, &b);
			tot[a]++;
			map[a][tot[a]]=b;
			tot[b]++;
			map[b][tot[b]]=a;
		}
		max=0;
		for (i=0;i<n;i++)
		{
			memset(con,0,sizeof(con));
			dfs(i,0);
		}
		printf("%d\n", max);

	}
	

	return 0;
}